"""
日志工具模块
"""
import os
import logging
import time
from logging.handlers import RotatingFileHandler
import allure

# 日志级别映射
LOG_LEVELS = {
    'debug': logging.DEBUG,
    'info': logging.INFO,
    'warning': logging.WARNING,
    'error': logging.ERROR,
    'critical': logging.CRITICAL
}

class Logger:
    """日志工具类，提供日志记录功能"""
    
    def __init__(self, name='api_test', level='info', log_dir='logs'):
        """
        初始化日志工具
        
        Args:
            name: 日志名称
            level: 日志级别
            log_dir: 日志文件目录
        """
        self.logger = logging.getLogger(name)
        self.logger.setLevel(LOG_LEVELS.get(level.lower(), logging.INFO))
        
        # 创建日志目录
        if not os.path.exists(log_dir):
            os.makedirs(log_dir)
        
        # 日志文件路径
        log_file = os.path.join(log_dir, f"{name}_{time.strftime('%Y%m%d')}.log")
        
        # 控制台处理器
        console_handler = logging.StreamHandler()
        console_handler.setLevel(LOG_LEVELS.get(level.lower(), logging.INFO))
        
        # 文件处理器
        file_handler = RotatingFileHandler(
            log_file, maxBytes=10*1024*1024, backupCount=5, encoding='utf-8'
        )
        file_handler.setLevel(LOG_LEVELS.get(level.lower(), logging.INFO))
        
        # 日志格式
        formatter = logging.Formatter(
            '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
        )
        console_handler.setFormatter(formatter)
        file_handler.setFormatter(formatter)
        
        # 添加处理器
        self.logger.addHandler(console_handler)
        self.logger.addHandler(file_handler)
    
    def debug(self, message):
        """
        记录DEBUG级别日志
        
        Args:
            message: 日志消息
        """
        self.logger.debug(message)
    
    def info(self, message):
        """
        记录INFO级别日志
        
        Args:
            message: 日志消息
        """
        self.logger.info(message)
        with allure.step(f"INFO: {message}"):
            pass
    
    def warning(self, message):
        """
        记录WARNING级别日志
        
        Args:
            message: 日志消息
        """
        self.logger.warning(message)
        with allure.step(f"WARNING: {message}"):
            pass
    
    def error(self, message):
        """
        记录ERROR级别日志
        
        Args:
            message: 日志消息
        """
        self.logger.error(message)
        with allure.step(f"ERROR: {message}"):
            allure.attach(
                message,
                name="错误详情",
                attachment_type=allure.attachment_type.TEXT
            )
    
    def critical(self, message):
        """
        记录CRITICAL级别日志
        
        Args:
            message: 日志消息
        """
        self.logger.critical(message)
        with allure.step(f"CRITICAL: {message}"):
            allure.attach(
                message,
                name="严重错误详情",
                attachment_type=allure.attachment_type.TEXT
            )

# 创建默认日志工具实例
logger = Logger() 